package com.shxy.service;

import com.shxy.entity.base.StuRaw;
import com.shxy.entity.custom.CustomClazz;
import com.shxy.entity.base.College;
import com.shxy.entity.base.Major;
import com.shxy.entity.custom.CustomStudent;
import com.shxy.entity.custom.MajorInService;
import org.springframework.cache.annotation.Cacheable;

import java.util.List;
import java.util.Optional;

/**
 * 基础信息接口
 */
public interface IBaseInfoService {
    /**
     * 查询全部基础学生信息
     * @return
     */
    @Cacheable(cacheNames = "stu_raw_all")
    List<StuRaw> getStuRawAll();

    /**
     * 添加学院信息
     * @param name
     * @return
     */
    Optional<College> addCollege(String name);

    /**
     * 添加专业信息
     * @param name
     * @return
     */
    Optional<Major> addMajor(String name);

    /**
     * 添加运行的专业
     * @param grade
     * @param college
     * @param major
     * @return
     */
    Optional<MajorInService> addMajorInService(String grade, College college, Major major);

    /**
     * 添加班级信息
     * @param college
     * @param major
     * @param clazzName
     * @return
     */
    Optional<CustomClazz> addClazz(College college, Major major, String clazzName, String year);

    /**
     * 初始化班级信息
     * @return
     */
    List<CustomClazz> initClazzs();

    /**
     * 初始化学生信息
     * @return
     */
    List<CustomStudent> initStudents();

    /**
     * 保存运行的专业信息
     * @param majorInService
     * @return
     */
    MajorInService saveMajorInService(MajorInService majorInService);

    /**
     * 保存班级信息
     * @param clazz
     * @return
     */
    CustomClazz saveClazz(CustomClazz clazz);

    /**
     * 获取年级列表
     * @return
     */
    List<String> getYearsAll();

    /**
     * 获取学院列表
     * @param year
     * @return
     */
    List<College> getCollegesAll(String year);

    /**
     * 根据年级和学院查询专业列表
     * @param year
     * @param collegeId
     * @return
     */
    List<Major> getMajors(String year, int collegeId);

    /**
     * 获取班级列表
     * @param year
     * @param collegeId
     * @param majorId
     * @return
     */
    List<CustomClazz> getClazzList(String year, int collegeId, int majorId);
}
